#ifndef NETCORE_H
#define NETCORE_H

// **
//
// 网络核心类
//   该类用于封装网络通讯的所有功能
//
// created by yiyefangzhou24
// created time 2024/1/5
//
// **

#include <QtNetwork>
#include <QTimer>
#include "msgpackage.h"

#define ERR_NETTIMEOUT          0x000010
#define ERR_FORMAT              0x000010
#define NET_CONNECTED           0x000020
#define NET_DISCONNECT          0x000021

class NetCore: public QObject, public MsgPackage
{
    Q_OBJECT
public:
    NetCore();

    // 配置信息
    void config(QString host, int port);

    // 连接服务器
    void start();

    // 关闭服务器连接
    void stop();

    // 发送屏幕位图数据
    void sendScData(int x, int y, QByteArray data);

    // 接收完整包
    void pkgReady(QByteArray data) override;


signals:

    // 信号函数 - 错误信息
    void sigError(int code, QString msg);

    // 信号函数 - 收到服务器下发的配置信息
    void sigScConfig(int scWidth, int scHeight, int indexX, int indexY, int bit, int fps);

    // 信号函数 - 服务器连接情况
    void sigServer(int code, QString msg);

    // 信号函数 - 接收上层下发的开始、停止抓屏发包指令
    void sigScSig(int code);

private slots:

    // 服务器连接 - 连接槽函数
    void on_tcp_connect();

    // 服务器连接 - 接收消息槽函数
    void on_tcp_read();

    // 服务器连接 - 断开连接槽函数
    void on_tcp_disconnect();

private:

    QString host;           //服务器IP地址

    int port;               //服务器端口号

    QTcpSocket * tcpSocket;   //socket连接

};

#endif // NETCORE_H
